--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Commit 56c59757bed62ab4b3ae3100d88a53b499aa3312
Parents : 5097fb6
Author : Ivan <ivan@quad4.io>
Signature : Signature validation error
Date : 2026-05-02T09:03:09-05:00
feat(locales): add bot status messages and forward functionality across multiple languages
Changes
8 files changed, 328 insertions(+), 8 deletions(-)
Diff
diff --git a/meshchatx/src/frontend/locales/de.json b/meshchatx/src/frontend/locales/de.json
index 9328f7a8..b205dfbe 100644
--- a/meshchatx/src/frontend/locales/de.json
+++ b/meshchatx/src/frontend/locales/de.json
@@ -19,6 +19,10 @@
"cancel": "Abbrechen",
"bot_started": "Bot erfolgreich gestartet",
"bot_stopped": "Bot gestoppt",
+ "start_pending": "Bot wird gestartet… LXMF und Reticulum können einen Moment benötigen.",
+ "stop_pending": "Bot wird gestoppt…",
+ "restart_pending": "Bot wird neu gestartet… kann einen Moment dauern.",
+ "bot_ready": "Bot läuft.",
"failed_to_start": "Bot konnte nicht gestartet werden",
"failed_to_stop": "Bot konnte nicht gestoppt werden",
"delete_bot": "Bot löschen",
@@ -1340,6 +1344,23 @@
"copy_hash": "Hash kopieren",
"reply": "Antworten",
"replying_to": "Antwort an",
+ "forward_banner_label": "Forwarded message",
+ "forward_you_shared": "You're forwarding this quote",
+ "forward_pick_recipient_title": "Forward to contact",
+ "forward_message": "Forward",
+ "forward_sent": "Message forwarded",
+ "forward_failed": "Could not forward message",
+ "forward_no_lxmf_destination": "This contact has no usable LXMF delivery address.",
+ "forward_verify_show": "Source and verification",
+ "forward_verify_hide": "Hide verification",
+ "forward_verify_explanation": "Paper LXMF wraps can appear as reticulum:// URIs only when this node still has full message bytes and the payload fits Paper limits; quoted snippets can always be spoofed.",
+ "forward_verify_loading": "Looking up verification URI…",
+ "forward_verify_open_uri": "Open verification URI",
+ "forward_verify_unavailable": "Original message bytes are not cached here, so no verification URI could be built.",
+ "forward_verify_not_cached": "Original message bytes are not cached here.",
+ "forward_verify_failed": "Verification lookup failed.",
+ "forward_content_stub": "_Forwarded via MeshChatX_\nAttachments and quoted text belong to the original sender.",
+ "forward_open_party_is_self": "That is your own address.",
"message_actions": "Nachrichtenaktionen",
"react": "Reagieren",
"reaction_you": "Du",
@@ -1402,9 +1423,24 @@
"delete_section_confirm": "Delete this section? Favourites will move to the main section.",
"unsupported_url": "unsupported url: ",
"path_away_suffix": "entfernt",
+ "renderer_chip_micron_js": "Micron JS",
+ "renderer_chip_micron_wasm": "Micron WASM",
+ "renderer_hint_micron_js": "micron-parser (JavaScript)",
+ "renderer_hint_micron_wasm": "micron-parser-go (WebAssembly)",
+ "renderer_hint_micron_wasm_pending": "WASM loading or unavailable; using JavaScript parser",
+ "renderer_popover_micron_wasm_powered": "Basierend auf ",
+ "renderer_popover_micron_wasm_active_tail": " {version}. WebAssembly-Renderer.",
+ "renderer_popover_micron_wasm_pending_tail": " {version} ist nicht verfügbar oder lädt noch; es wird micron-parser (JavaScript) verwendet.",
+ "renderer_chip_markdown": "Markdown",
+ "renderer_chip_html": "HTML",
+ "renderer_chip_plaintext": "Text",
+ "renderer_hint_markdown": "Markdown renderer",
+ "renderer_hint_html": "Sanitized HTML",
+ "renderer_hint_plaintext": "Escaped plain text",
"load_phase_default": "Seite wird geladen",
"load_phase_finding_path": "Netzwerkpfad zum Knoten wird gesucht",
"load_phase_establishing_link": "Verbindung zum Knoten wird aufgebaut",
+ "page_download_cancelled": "Download abgebrochen.",
"load_phase_requesting_page": "Seitenanfrage wird gesendet",
"load_phase_transferring": "Seite wird empfangen",
"path_finder": "Pfadfinder",
@@ -2502,7 +2538,11 @@
"share_apk_desc": "Das installierte MeshChatX-Paket per Bluetooth, Nearby Share oder einer anderen App senden. Nur in der Android-App verfügbar.",
"share_apk_short_hint": "Öffnet das Teilen-Menü für diese APK.",
"share_apk": "App teilen (APK)",
- "share_apk_failed": "APK konnte nicht geteilt werden."
+ "share_apk_failed": "APK konnte nicht geteilt werden.",
+ "nomad_micron_wasm_title": "Micron (WASM)",
+ "nomad_micron_wasm_desc_before_link": "Optional WASM renderer (",
+ "nomad_micron_wasm_link_label": "micron-parser-go",
+ "nomad_micron_wasm_desc_after_link": "): faster when supported; falls back to bundled JS. Off keeps JS only."
},
"debug": {
"title": "Debug Logs",
diff --git a/meshchatx/src/frontend/locales/en.json b/meshchatx/src/frontend/locales/en.json
index f71e8440..f7a2b6c9 100644
--- a/meshchatx/src/frontend/locales/en.json
+++ b/meshchatx/src/frontend/locales/en.json
@@ -19,6 +19,10 @@
"cancel": "Cancel",
"bot_started": "Bot started successfully",
"bot_stopped": "Bot stopped",
+ "start_pending": "Starting bot… LXMF and Reticulum can take a moment.",
+ "stop_pending": "Stopping bot…",
+ "restart_pending": "Restarting bot… this may take a moment.",
+ "bot_ready": "Bot is up and running.",
"failed_to_start": "Failed to start bot",
"failed_to_stop": "Failed to stop bot",
"delete_bot": "Delete Bot",
@@ -1288,6 +1292,23 @@
"snr_val": "SNR: {snr}dB",
"reply": "Reply",
"replying_to": "Replying to",
+ "forward_banner_label": "Forwarded message",
+ "forward_you_shared": "You're forwarding this quote",
+ "forward_pick_recipient_title": "Forward to contact",
+ "forward_message": "Forward",
+ "forward_sent": "Message forwarded",
+ "forward_failed": "Could not forward message",
+ "forward_no_lxmf_destination": "This contact has no usable LXMF delivery address.",
+ "forward_verify_show": "Source and verification",
+ "forward_verify_hide": "Hide verification",
+ "forward_verify_explanation": "Paper LXMF wraps can appear as reticulum:// URIs only when this node still has full message bytes and the payload fits Paper limits; quoted snippets can always be spoofed.",
+ "forward_verify_loading": "Looking up verification URI…",
+ "forward_verify_open_uri": "Open verification URI",
+ "forward_verify_unavailable": "Original message bytes are not cached here, so no verification URI could be built.",
+ "forward_verify_not_cached": "Original message bytes are not cached here.",
+ "forward_verify_failed": "Verification lookup failed.",
+ "forward_content_stub": "_Forwarded via MeshChatX_\nAttachments and quoted text belong to the original sender.",
+ "forward_open_party_is_self": "That is your own address.",
"message_actions": "Message actions",
"react": "React",
"reaction_you": "You",
@@ -1310,7 +1331,11 @@
"share_apk_desc": "Send the installed MeshChatX package over Bluetooth, Nearby Share, or another app. Only available in the Android app.",
"share_apk_short_hint": "Opens the system share sheet for this APK.",
"share_apk": "Share app (APK)",
- "share_apk_failed": "Could not open the share sheet for the APK."
+ "share_apk_failed": "Could not open the share sheet for the APK.",
+ "nomad_micron_wasm_title": "Micron (WASM)",
+ "nomad_micron_wasm_desc_before_link": "Optional WASM renderer (",
+ "nomad_micron_wasm_link_label": "micron-parser-go",
+ "nomad_micron_wasm_desc_after_link": "): faster when supported; falls back to bundled JS. Off keeps JS only."
},
"debug": {
"title": "Debug Logs",
@@ -1467,9 +1492,24 @@
"delete_section_confirm": "Delete this section? Favourites will move to the main section.",
"unsupported_url": "unsupported url: ",
"path_away_suffix": "away",
+ "renderer_chip_micron_js": "Micron JS",
+ "renderer_chip_micron_wasm": "Micron WASM",
+ "renderer_hint_micron_js": "micron-parser (JavaScript)",
+ "renderer_hint_micron_wasm": "micron-parser-go (WebAssembly)",
+ "renderer_hint_micron_wasm_pending": "WASM loading or unavailable; using JavaScript parser",
+ "renderer_popover_micron_wasm_powered": "Powered by ",
+ "renderer_popover_micron_wasm_active_tail": " {version}. WebAssembly renderer.",
+ "renderer_popover_micron_wasm_pending_tail": " {version} is unavailable or still loading; using micron-parser (JavaScript).",
+ "renderer_chip_markdown": "Markdown",
+ "renderer_chip_html": "HTML",
+ "renderer_chip_plaintext": "Text",
+ "renderer_hint_markdown": "Markdown renderer",
+ "renderer_hint_html": "Sanitized HTML",
+ "renderer_hint_plaintext": "Escaped plain text",
"load_phase_default": "Loading page",
"load_phase_finding_path": "Looking for a network path to the node",
"load_phase_establishing_link": "Establishing link to the node",
+ "page_download_cancelled": "Download cancelled.",
"load_phase_requesting_page": "Sending page request",
"load_phase_transferring": "Receiving page",
"path_finder": "Path Finder",
diff --git a/meshchatx/src/frontend/locales/es.json b/meshchatx/src/frontend/locales/es.json
index 35d1335c..2cc9bd05 100644
--- a/meshchatx/src/frontend/locales/es.json
+++ b/meshchatx/src/frontend/locales/es.json
@@ -19,6 +19,10 @@
"cancel": "Cancelar",
"bot_started": "Bot comenzó con éxito",
"bot_stopped": "Bot paró",
+ "start_pending": "Iniciando bot… LXMF y Reticulum pueden tardar un momento.",
+ "stop_pending": "Deteniendo bot…",
+ "restart_pending": "Reiniciando bot… puede tardar un momento.",
+ "bot_ready": "El bot está activo.",
"failed_to_start": "Error al iniciar bot",
"failed_to_stop": "Error al detener bot",
"delete_bot": "Eliminar bot",
@@ -1288,6 +1292,23 @@
"snr_val": "SNR:{snr}dB",
"reply": "Respuesta",
"replying_to": "Respuesta a",
+ "forward_banner_label": "Forwarded message",
+ "forward_you_shared": "You're forwarding this quote",
+ "forward_pick_recipient_title": "Forward to contact",
+ "forward_message": "Forward",
+ "forward_sent": "Message forwarded",
+ "forward_failed": "Could not forward message",
+ "forward_no_lxmf_destination": "This contact has no usable LXMF delivery address.",
+ "forward_verify_show": "Source and verification",
+ "forward_verify_hide": "Hide verification",
+ "forward_verify_explanation": "Paper LXMF wraps can appear as reticulum:// URIs only when this node still has full message bytes and the payload fits Paper limits; quoted snippets can always be spoofed.",
+ "forward_verify_loading": "Looking up verification URI…",
+ "forward_verify_open_uri": "Open verification URI",
+ "forward_verify_unavailable": "Original message bytes are not cached here, so no verification URI could be built.",
+ "forward_verify_not_cached": "Original message bytes are not cached here.",
+ "forward_verify_failed": "Verification lookup failed.",
+ "forward_content_stub": "_Forwarded via MeshChatX_\nAttachments and quoted text belong to the original sender.",
+ "forward_open_party_is_self": "That is your own address.",
"message_actions": "Acciones de mensajes",
"react": "Reacción",
"reaction_you": "Tú.",
@@ -1310,7 +1331,11 @@
"share_apk_desc": "Envía el paquete instalado de MeshChatX por Bluetooth, Nearby Share u otra app. Solo en la app de Android.",
"share_apk_short_hint": "Abre el menú del sistema para compartir este APK.",
"share_apk": "Compartir app (APK)",
- "share_apk_failed": "No se pudo compartir el APK."
+ "share_apk_failed": "No se pudo compartir el APK.",
+ "nomad_micron_wasm_title": "Micron (WASM)",
+ "nomad_micron_wasm_desc_before_link": "Optional WASM renderer (",
+ "nomad_micron_wasm_link_label": "micron-parser-go",
+ "nomad_micron_wasm_desc_after_link": "): faster when supported; falls back to bundled JS. Off keeps JS only."
},
"debug": {
"title": "Debug Logs",
@@ -1467,9 +1492,24 @@
"delete_section_confirm": "¿Supir esta sección? Los Favoritos se moverán a la sección principal.",
"unsupported_url": "url sin soporte:",
"path_away_suffix": "lejos",
+ "renderer_chip_micron_js": "Micron JS",
+ "renderer_chip_micron_wasm": "Micron WASM",
+ "renderer_hint_micron_js": "micron-parser (JavaScript)",
+ "renderer_hint_micron_wasm": "micron-parser-go (WebAssembly)",
+ "renderer_hint_micron_wasm_pending": "WASM loading or unavailable; using JavaScript parser",
+ "renderer_popover_micron_wasm_powered": "Impulsado por ",
+ "renderer_popover_micron_wasm_active_tail": " {version}. Motor WebAssembly.",
+ "renderer_popover_micron_wasm_pending_tail": " {version} no está disponible o sigue cargando; se usa micron-parser (JavaScript).",
+ "renderer_chip_markdown": "Markdown",
+ "renderer_chip_html": "HTML",
+ "renderer_chip_plaintext": "Text",
+ "renderer_hint_markdown": "Markdown renderer",
+ "renderer_hint_html": "Sanitized HTML",
+ "renderer_hint_plaintext": "Escaped plain text",
"load_phase_default": "Cargando página",
"load_phase_finding_path": "Buscando un camino de red hacia el nodo",
"load_phase_establishing_link": "Establecer vínculos con el nodo",
+ "page_download_cancelled": "Descarga cancelada.",
"load_phase_requesting_page": "Enviar solicitud de página",
"load_phase_transferring": "Página de recepción",
"path_finder": "Buscador de ruta",
diff --git a/meshchatx/src/frontend/locales/fr.json b/meshchatx/src/frontend/locales/fr.json
index 29fb01a7..583242f2 100644
--- a/meshchatx/src/frontend/locales/fr.json
+++ b/meshchatx/src/frontend/locales/fr.json
@@ -19,6 +19,10 @@
"cancel": "Annuler",
"bot_started": "Bot a commencé avec succès",
"bot_stopped": "Bot arrêté",
+ "start_pending": "Démarrage du bot… LXMF et Reticulum peuvent prendre un moment.",
+ "stop_pending": "Arrêt du bot…",
+ "restart_pending": "Redémarrage du bot… peut prendre un moment.",
+ "bot_ready": "Le bot fonctionne.",
"failed_to_start": "Échec du démarrage du robot",
"failed_to_stop": "Échec de l'arrêt du robot",
"delete_bot": "Supprimer Bot",
@@ -1288,6 +1292,23 @@
"snr_val": "SNR:{snr}dB",
"reply": "Réponse",
"replying_to": "Réponse",
+ "forward_banner_label": "Forwarded message",
+ "forward_you_shared": "You're forwarding this quote",
+ "forward_pick_recipient_title": "Forward to contact",
+ "forward_message": "Forward",
+ "forward_sent": "Message forwarded",
+ "forward_failed": "Could not forward message",
+ "forward_no_lxmf_destination": "This contact has no usable LXMF delivery address.",
+ "forward_verify_show": "Source and verification",
+ "forward_verify_hide": "Hide verification",
+ "forward_verify_explanation": "Paper LXMF wraps can appear as reticulum:// URIs only when this node still has full message bytes and the payload fits Paper limits; quoted snippets can always be spoofed.",
+ "forward_verify_loading": "Looking up verification URI…",
+ "forward_verify_open_uri": "Open verification URI",
+ "forward_verify_unavailable": "Original message bytes are not cached here, so no verification URI could be built.",
+ "forward_verify_not_cached": "Original message bytes are not cached here.",
+ "forward_verify_failed": "Verification lookup failed.",
+ "forward_content_stub": "_Forwarded via MeshChatX_\nAttachments and quoted text belong to the original sender.",
+ "forward_open_party_is_self": "That is your own address.",
"message_actions": "Actions du message",
"react": "Réagir",
"reaction_you": "Toi",
@@ -1310,7 +1331,11 @@
"share_apk_desc": "Envoyez le paquet MeshChatX installé via Bluetooth, Nearby Share ou une autre application. Uniquement dans l'application Android.",
"share_apk_short_hint": "Ouvre la feuille de partage système pour cet APK.",
"share_apk": "Partager l'app (APK)",
- "share_apk_failed": "Impossible de partager l'APK."
+ "share_apk_failed": "Impossible de partager l'APK.",
+ "nomad_micron_wasm_title": "Micron (WASM)",
+ "nomad_micron_wasm_desc_before_link": "Optional WASM renderer (",
+ "nomad_micron_wasm_link_label": "micron-parser-go",
+ "nomad_micron_wasm_desc_after_link": "): faster when supported; falls back to bundled JS. Off keeps JS only."
},
"debug": {
"title": "Débogues",
@@ -1467,9 +1492,24 @@
"delete_section_confirm": "Supprimer cette section? Les favoris passeront à la section principale.",
"unsupported_url": "l'url non supporté:",
"path_away_suffix": "loin",
+ "renderer_chip_micron_js": "Micron JS",
+ "renderer_chip_micron_wasm": "Micron WASM",
+ "renderer_hint_micron_js": "micron-parser (JavaScript)",
+ "renderer_hint_micron_wasm": "micron-parser-go (WebAssembly)",
+ "renderer_hint_micron_wasm_pending": "WASM loading or unavailable; using JavaScript parser",
+ "renderer_popover_micron_wasm_powered": "Propulsé par ",
+ "renderer_popover_micron_wasm_active_tail": " {version}. Rendu WebAssembly.",
+ "renderer_popover_micron_wasm_pending_tail": " {version} est indisponible ou encore en chargement ; utilisation de micron-parser (JavaScript).",
+ "renderer_chip_markdown": "Markdown",
+ "renderer_chip_html": "HTML",
+ "renderer_chip_plaintext": "Text",
+ "renderer_hint_markdown": "Markdown renderer",
+ "renderer_hint_html": "Sanitized HTML",
+ "renderer_hint_plaintext": "Escaped plain text",
"load_phase_default": "Chargement de la page",
"load_phase_finding_path": "Recherche d'un chemin réseau vers le nœud",
"load_phase_establishing_link": "Établir un lien avec le nœud",
+ "page_download_cancelled": "Téléchargement annulé.",
"load_phase_requesting_page": "Envoi de la demande de page",
"load_phase_transferring": "Page de réception",
"path_finder": "Chercheur de chemin",
diff --git a/meshchatx/src/frontend/locales/it.json b/meshchatx/src/frontend/locales/it.json
index bc39befd..116bccd7 100644
--- a/meshchatx/src/frontend/locales/it.json
+++ b/meshchatx/src/frontend/locales/it.json
@@ -19,6 +19,10 @@
"cancel": "Annulla",
"bot_started": "Bot avviato con successo",
"bot_stopped": "Bot fermato",
+ "start_pending": "Avvio del bot… LXMF e Reticulum possono richiedere qualche momento.",
+ "stop_pending": "Arresto del bot…",
+ "restart_pending": "Riavvio del bot… può richiedere qualche momento.",
+ "bot_ready": "Il bot è attivo.",
"failed_to_start": "Impossibile avviare il bot",
"failed_to_stop": "Impossibile fermare il bot",
"delete_bot": "Elimina Bot",
@@ -1340,6 +1344,23 @@
"snr_val": "SNR: {snr}dB",
"reply": "Rispondi",
"replying_to": "In risposta a",
+ "forward_banner_label": "Forwarded message",
+ "forward_you_shared": "You're forwarding this quote",
+ "forward_pick_recipient_title": "Forward to contact",
+ "forward_message": "Forward",
+ "forward_sent": "Message forwarded",
+ "forward_failed": "Could not forward message",
+ "forward_no_lxmf_destination": "This contact has no usable LXMF delivery address.",
+ "forward_verify_show": "Source and verification",
+ "forward_verify_hide": "Hide verification",
+ "forward_verify_explanation": "Paper LXMF wraps can appear as reticulum:// URIs only when this node still has full message bytes and the payload fits Paper limits; quoted snippets can always be spoofed.",
+ "forward_verify_loading": "Looking up verification URI…",
+ "forward_verify_open_uri": "Open verification URI",
+ "forward_verify_unavailable": "Original message bytes are not cached here, so no verification URI could be built.",
+ "forward_verify_not_cached": "Original message bytes are not cached here.",
+ "forward_verify_failed": "Verification lookup failed.",
+ "forward_content_stub": "_Forwarded via MeshChatX_\nAttachments and quoted text belong to the original sender.",
+ "forward_open_party_is_self": "That is your own address.",
"message_actions": "Azioni messaggio",
"react": "Reagisci",
"reaction_you": "Tu",
@@ -1362,7 +1383,11 @@
"share_apk_desc": "Invia il pacchetto MeshChatX installato tramite Bluetooth, Nearby Share o un'altra app. Solo nell'app Android.",
"share_apk_short_hint": "Apre la condivisione di sistema per questo APK.",
"share_apk": "Condividi app (APK)",
- "share_apk_failed": "Impossibile condividere l'APK."
+ "share_apk_failed": "Impossibile condividere l'APK.",
+ "nomad_micron_wasm_title": "Micron (WASM)",
+ "nomad_micron_wasm_desc_before_link": "Optional WASM renderer (",
+ "nomad_micron_wasm_link_label": "micron-parser-go",
+ "nomad_micron_wasm_desc_after_link": "): faster when supported; falls back to bundled JS. Off keeps JS only."
},
"debug": {
"title": "Log di Debug",
@@ -1519,9 +1544,24 @@
"delete_section_confirm": "Eliminare questa sezione? I preferiti verranno spostati nella sezione principale.",
"unsupported_url": "url non supportato: ",
"path_away_suffix": "di distanza",
+ "renderer_chip_micron_js": "Micron JS",
+ "renderer_chip_micron_wasm": "Micron WASM",
+ "renderer_hint_micron_js": "micron-parser (JavaScript)",
+ "renderer_hint_micron_wasm": "micron-parser-go (WebAssembly)",
+ "renderer_hint_micron_wasm_pending": "WASM loading or unavailable; using JavaScript parser",
+ "renderer_popover_micron_wasm_powered": "Basato su ",
+ "renderer_popover_micron_wasm_active_tail": " {version}. Renderer WebAssembly.",
+ "renderer_popover_micron_wasm_pending_tail": " {version} non è disponibile o è ancora in caricamento; si usa micron-parser (JavaScript).",
+ "renderer_chip_markdown": "Markdown",
+ "renderer_chip_html": "HTML",
+ "renderer_chip_plaintext": "Text",
+ "renderer_hint_markdown": "Markdown renderer",
+ "renderer_hint_html": "Sanitized HTML",
+ "renderer_hint_plaintext": "Escaped plain text",
"load_phase_default": "Caricamento pagina",
"load_phase_finding_path": "Ricerca del percorso di rete verso il nodo",
"load_phase_establishing_link": "Connessione al nodo in corso",
+ "page_download_cancelled": "Download annullato.",
"load_phase_requesting_page": "Invio richiesta pagina",
"load_phase_transferring": "Ricezione pagina",
"path_finder": "Ricerca percorso",
diff --git a/meshchatx/src/frontend/locales/nl.json b/meshchatx/src/frontend/locales/nl.json
index 3045f404..af46e6d6 100644
--- a/meshchatx/src/frontend/locales/nl.json
+++ b/meshchatx/src/frontend/locales/nl.json
@@ -19,6 +19,10 @@
"cancel": "Annuleren",
"bot_started": "Bot is succesvol gestart",
"bot_stopped": "Bot stopte",
+ "start_pending": "Bot wordt gestart… LXMF en Reticulum kunnen even duren.",
+ "stop_pending": "Bot wordt gestopt…",
+ "restart_pending": "Bot wordt opnieuw gestart… dit kan even duren.",
+ "bot_ready": "Bot is actief.",
"failed_to_start": "Kon bot niet starten",
"failed_to_stop": "Stoppen van bot is mislukt",
"delete_bot": "Bot verwijderen",
@@ -1288,6 +1292,23 @@
"snr_val": "SNR:{snr}dB",
"reply": "Antwoord",
"replying_to": "Beantwoorden aan",
+ "forward_banner_label": "Forwarded message",
+ "forward_you_shared": "You're forwarding this quote",
+ "forward_pick_recipient_title": "Forward to contact",
+ "forward_message": "Forward",
+ "forward_sent": "Message forwarded",
+ "forward_failed": "Could not forward message",
+ "forward_no_lxmf_destination": "This contact has no usable LXMF delivery address.",
+ "forward_verify_show": "Source and verification",
+ "forward_verify_hide": "Hide verification",
+ "forward_verify_explanation": "Paper LXMF wraps can appear as reticulum:// URIs only when this node still has full message bytes and the payload fits Paper limits; quoted snippets can always be spoofed.",
+ "forward_verify_loading": "Looking up verification URI…",
+ "forward_verify_open_uri": "Open verification URI",
+ "forward_verify_unavailable": "Original message bytes are not cached here, so no verification URI could be built.",
+ "forward_verify_not_cached": "Original message bytes are not cached here.",
+ "forward_verify_failed": "Verification lookup failed.",
+ "forward_content_stub": "_Forwarded via MeshChatX_\nAttachments and quoted text belong to the original sender.",
+ "forward_open_party_is_self": "That is your own address.",
"message_actions": "Berichtacties",
"react": "Reageren",
"reaction_you": "Jij",
@@ -1310,7 +1331,11 @@
"share_apk_desc": "Stuur het geïnstalleerde MeshChatX-pakket via Bluetooth, Nearby Share of een andere app. Alleen in de Android-app.",
"share_apk_short_hint": "Opent het systeemdeelvenster voor deze APK.",
"share_apk": "App delen (APK)",
- "share_apk_failed": "APK kan niet worden gedeeld."
+ "share_apk_failed": "APK kan niet worden gedeeld.",
+ "nomad_micron_wasm_title": "Micron (WASM)",
+ "nomad_micron_wasm_desc_before_link": "Optional WASM renderer (",
+ "nomad_micron_wasm_link_label": "micron-parser-go",
+ "nomad_micron_wasm_desc_after_link": "): faster when supported; falls back to bundled JS. Off keeps JS only."
},
"debug": {
"title": "Debuglogs",
@@ -1467,9 +1492,24 @@
"delete_section_confirm": "Deze sectie verwijderen? De favorieten gaan naar de hoofdsectie.",
"unsupported_url": "niet-ondersteunde url:",
"path_away_suffix": "weg",
+ "renderer_chip_micron_js": "Micron JS",
+ "renderer_chip_micron_wasm": "Micron WASM",
+ "renderer_hint_micron_js": "micron-parser (JavaScript)",
+ "renderer_hint_micron_wasm": "micron-parser-go (WebAssembly)",
+ "renderer_hint_micron_wasm_pending": "WASM loading or unavailable; using JavaScript parser",
+ "renderer_popover_micron_wasm_powered": "Aangedreven door ",
+ "renderer_popover_micron_wasm_active_tail": " {version}. WebAssembly-renderer.",
+ "renderer_popover_micron_wasm_pending_tail": " {version} is niet beschikbaar of laadt nog; micron-parser (JavaScript) wordt gebruikt.",
+ "renderer_chip_markdown": "Markdown",
+ "renderer_chip_html": "HTML",
+ "renderer_chip_plaintext": "Text",
+ "renderer_hint_markdown": "Markdown renderer",
+ "renderer_hint_html": "Sanitized HTML",
+ "renderer_hint_plaintext": "Escaped plain text",
"load_phase_default": "Laden pagina",
"load_phase_finding_path": "Op zoek naar een netwerkpad naar het knooppunt",
"load_phase_establishing_link": "Koppeling naar het knooppunt instellen",
+ "page_download_cancelled": "Download geannuleerd.",
"load_phase_requesting_page": "Paginaverzoek versturen",
"load_phase_transferring": "Pagina ontvangen",
"path_finder": "Padzoeker",
diff --git a/meshchatx/src/frontend/locales/ru.json b/meshchatx/src/frontend/locales/ru.json
index 5855365e..49e615f2 100644
--- a/meshchatx/src/frontend/locales/ru.json
+++ b/meshchatx/src/frontend/locales/ru.json
@@ -19,6 +19,10 @@
"cancel": "Отмена",
"bot_started": "Бот успешно запущен",
"bot_stopped": "Бот остановлен",
+ "start_pending": "Запуск бота… LXMF и Reticulum могут загружаться несколько секунд.",
+ "stop_pending": "Остановка бота…",
+ "restart_pending": "Перезапуск бота… это может занять время.",
+ "bot_ready": "Бот запущен и работает.",
"failed_to_start": "Не удалось запустить бота",
"failed_to_stop": "Не удалось остановить бота",
"delete_bot": "Удалить бота",
@@ -1340,6 +1344,23 @@
"copy_hash": "Копировать хеш",
"reply": "Ответить",
"replying_to": "Ответ на",
+ "forward_banner_label": "Forwarded message",
+ "forward_you_shared": "You're forwarding this quote",
+ "forward_pick_recipient_title": "Forward to contact",
+ "forward_message": "Forward",
+ "forward_sent": "Message forwarded",
+ "forward_failed": "Could not forward message",
+ "forward_no_lxmf_destination": "This contact has no usable LXMF delivery address.",
+ "forward_verify_show": "Source and verification",
+ "forward_verify_hide": "Hide verification",
+ "forward_verify_explanation": "Paper LXMF wraps can appear as reticulum:// URIs only when this node still has full message bytes and the payload fits Paper limits; quoted snippets can always be spoofed.",
+ "forward_verify_loading": "Looking up verification URI…",
+ "forward_verify_open_uri": "Open verification URI",
+ "forward_verify_unavailable": "Original message bytes are not cached here, so no verification URI could be built.",
+ "forward_verify_not_cached": "Original message bytes are not cached here.",
+ "forward_verify_failed": "Verification lookup failed.",
+ "forward_content_stub": "_Forwarded via MeshChatX_\nAttachments and quoted text belong to the original sender.",
+ "forward_open_party_is_self": "That is your own address.",
"message_actions": "Действия с сообщением",
"react": "Реакции",
"reaction_you": "Вы",
@@ -1402,9 +1423,24 @@
"delete_section_confirm": "Delete this section? Favourites will move to the main section.",
"unsupported_url": "unsupported url: ",
"path_away_suffix": "от вас",
+ "renderer_chip_micron_js": "Micron JS",
+ "renderer_chip_micron_wasm": "Micron WASM",
+ "renderer_hint_micron_js": "micron-parser (JavaScript)",
+ "renderer_hint_micron_wasm": "micron-parser-go (WebAssembly)",
+ "renderer_hint_micron_wasm_pending": "WASM loading or unavailable; using JavaScript parser",
+ "renderer_popover_micron_wasm_powered": "На базе ",
+ "renderer_popover_micron_wasm_active_tail": " {version}. Рендерер WebAssembly.",
+ "renderer_popover_micron_wasm_pending_tail": " {version} недоступен или ещё загружается; используется micron-parser (JavaScript).",
+ "renderer_chip_markdown": "Markdown",
+ "renderer_chip_html": "HTML",
+ "renderer_chip_plaintext": "Text",
+ "renderer_hint_markdown": "Markdown renderer",
+ "renderer_hint_html": "Sanitized HTML",
+ "renderer_hint_plaintext": "Escaped plain text",
"load_phase_default": "Загрузка страницы",
"load_phase_finding_path": "Поиск сетевого пути к узлу",
"load_phase_establishing_link": "Установка соединения с узлом",
+ "page_download_cancelled": "Загрузка отменена.",
"load_phase_requesting_page": "Отправка запроса страницы",
"load_phase_transferring": "Приём страницы",
"path_finder": "Поиск маршрута",
@@ -2502,7 +2538,11 @@
"share_apk_desc": "Отправьте установленный пакет MeshChatX по Bluetooth, Nearby Share или другому приложению. Только в Android-приложении.",
"share_apk_short_hint": "Открывает системное меню для отправки этого APK.",
"share_apk": "Поделиться приложением (APK)",
- "share_apk_failed": "Не удалось поделиться APK."
+ "share_apk_failed": "Не удалось поделиться APK.",
+ "nomad_micron_wasm_title": "Micron (WASM)",
+ "nomad_micron_wasm_desc_before_link": "Optional WASM renderer (",
+ "nomad_micron_wasm_link_label": "micron-parser-go",
+ "nomad_micron_wasm_desc_after_link": "): faster when supported; falls back to bundled JS. Off keeps JS only."
},
"debug": {
"title": "Журнал отладки",
diff --git a/meshchatx/src/frontend/locales/zh.json b/meshchatx/src/frontend/locales/zh.json
index 154b80c4..455ea7e0 100644
--- a/meshchatx/src/frontend/locales/zh.json
+++ b/meshchatx/src/frontend/locales/zh.json
@@ -19,6 +19,10 @@
"cancel": "取消",
"bot_started": "机器人启动成功",
"bot_stopped": "机器人已停止",
+ "start_pending": "正在启动机器人… LXMF 和 Reticulum 可能需要一点时间。",
+ "stop_pending": "正在停止机器人…",
+ "restart_pending": "正在重启机器人… 可能需要一点时间。",
+ "bot_ready": "机器人已就绪并在运行。",
"failed_to_start": "启动机器人失败",
"failed_to_stop": "停止机器人失败",
"delete_bot": "删除机器人",
@@ -1288,6 +1292,23 @@
"snr_val": "SNR:{snr} dB",
"reply": "回复",
"replying_to": "回复给",
+ "forward_banner_label": "Forwarded message",
+ "forward_you_shared": "You're forwarding this quote",
+ "forward_pick_recipient_title": "Forward to contact",
+ "forward_message": "Forward",
+ "forward_sent": "Message forwarded",
+ "forward_failed": "Could not forward message",
+ "forward_no_lxmf_destination": "This contact has no usable LXMF delivery address.",
+ "forward_verify_show": "Source and verification",
+ "forward_verify_hide": "Hide verification",
+ "forward_verify_explanation": "Paper LXMF wraps can appear as reticulum:// URIs only when this node still has full message bytes and the payload fits Paper limits; quoted snippets can always be spoofed.",
+ "forward_verify_loading": "Looking up verification URI…",
+ "forward_verify_open_uri": "Open verification URI",
+ "forward_verify_unavailable": "Original message bytes are not cached here, so no verification URI could be built.",
+ "forward_verify_not_cached": "Original message bytes are not cached here.",
+ "forward_verify_failed": "Verification lookup failed.",
+ "forward_content_stub": "_Forwarded via MeshChatX_\nAttachments and quoted text belong to the original sender.",
+ "forward_open_party_is_self": "That is your own address.",
"message_actions": "消息操作",
"react": "反应",
"reaction_you": "您",
@@ -1310,7 +1331,11 @@
"share_apk_desc": "通过蓝牙、附近分享或其他应用发送已安装的 MeshChatX 安装包。仅限 Android 应用。",
"share_apk_short_hint": "打开系统分享面板以发送此 APK。",
"share_apk": "分享应用(APK)",
- "share_apk_failed": "无法打开 APK 分享。"
+ "share_apk_failed": "无法打开 APK 分享。",
+ "nomad_micron_wasm_title": "Micron (WASM)",
+ "nomad_micron_wasm_desc_before_link": "Optional WASM renderer (",
+ "nomad_micron_wasm_link_label": "micron-parser-go",
+ "nomad_micron_wasm_desc_after_link": "): faster when supported; falls back to bundled JS. Off keeps JS only."
},
"debug": {
"title": "调试日志",
@@ -1467,9 +1492,24 @@
"delete_section_confirm": "删除此区域?收藏将移至主区域。",
"unsupported_url": "不支持的 URL:",
"path_away_suffix": "之外",
+ "renderer_chip_micron_js": "Micron JS",
+ "renderer_chip_micron_wasm": "Micron WASM",
+ "renderer_hint_micron_js": "micron-parser (JavaScript)",
+ "renderer_hint_micron_wasm": "micron-parser-go (WebAssembly)",
+ "renderer_hint_micron_wasm_pending": "WASM loading or unavailable; using JavaScript parser",
+ "renderer_popover_micron_wasm_powered": "由 ",
+ "renderer_popover_micron_wasm_active_tail": " {version} 驱动。WebAssembly 渲染。",
+ "renderer_popover_micron_wasm_pending_tail": " {version} 不可用或仍在加载;使用 micron-parser(JavaScript)。",
+ "renderer_chip_markdown": "Markdown",
+ "renderer_chip_html": "HTML",
+ "renderer_chip_plaintext": "Text",
+ "renderer_hint_markdown": "Markdown renderer",
+ "renderer_hint_html": "Sanitized HTML",
+ "renderer_hint_plaintext": "Escaped plain text",
"load_phase_default": "正在加载页面",
"load_phase_finding_path": "寻找通往节点的网络路径",
"load_phase_establishing_link": "建立与节点的链接",
+ "page_download_cancelled": "下载已取消。",
"load_phase_requesting_page": "发送页面请求",
"load_phase_transferring": "接收页面",
"path_finder": "路径查找器",
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────